<?php
// 智能网站生成器 - 主入口文件

// 定义常量
define('ROOT_PATH', dirname(__DIR__) . '/');
define('APP_PATH', ROOT_PATH . 'app/');
define('CONFIG_PATH', ROOT_PATH . 'config/');
define('TEMPLATE_PATH', ROOT_PATH . '../template/');
define('GENERATED_PATH', ROOT_PATH . '../generated_sites/');

error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 1);

// 加载辅助函数
require_once ROOT_PATH . 'helper.php';

// 加载路由配置
$routes = include ROOT_PATH . 'route/app.php';

// 路由匹配与请求处理
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$method = $_SERVER['REQUEST_METHOD'];

// 默认控制器和方法
$controller = 'website';
$action = 'index';
$params = [];

// 路由匹配
foreach ($routes as $routePattern => $routeInfo) {
    // 处理带参数的路由
    $pattern = preg_replace('/:\w+/', '([^/]+)', $routePattern);
    $pattern = str_replace('/', '\\/', $pattern);
    
    if (preg_match('/^' . $pattern . '$/', $uri, $matches) && $routeInfo['method'] === $method) {
        $controller = $routeInfo['controller'];
        $action = $routeInfo['action'];
        
        // 提取路由参数
        if (count($matches) > 1) {
            array_shift($matches);
            // 获取路由模式中的参数名
            preg_match_all('/:\w+/', $routePattern, $paramNames);
            $paramNames = $paramNames[0];
            
            foreach ($paramNames as $index => $paramName) {
                $paramName = substr($paramName, 1); // 去掉冒号
                $params[$paramName] = $matches[$index] ?? null;
            }
        }
        break;
    }
}

// 自动加载控制器
$controllerName = 'app\\controller\\' . ucfirst($controller) . 'Controller';

// 确保类文件存在
$controllerFile = APP_PATH . 'controller/' . ucfirst($controller) . 'Controller.php';
if (!file_exists($controllerFile)) {
    header('HTTP/1.1 404 Not Found');
    echo '控制器不存在: ' . $controllerFile;
    exit;
}

// 加载控制器文件
require_once $controllerFile;

// 创建控制器实例并调用方法
if (class_exists($controllerName) && method_exists($controllerName, $action)) {
    $controllerInstance = new $controllerName();
    $result = call_user_func_array([$controllerInstance, $action], $params);
    echo $result;
} else {
    header('HTTP/1.1 404 Not Found');
    echo '方法不存在: ' . $action . ' in ' . $controllerName;
}